home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / tip / ivpyr.tip < prev    next >
Text File  |  1993-09-15  |  2KB  |  68 lines

  1. % This macro source file is from the four volume series
  2. % "TeX in Practice" by Stephan von Bechtolsheim, published
  3. % 1993 by Springer-Verlag, New York.
  4. % Copyright 1993 Stephan von Bechtolsheim.
  5. % No warranty or liability is assumed.
  6. % This macro may be copied freely if no fees other than
  7. % media cost or shipping charges are charged and as long
  8. % as this copyright and the following source code itself
  9. % is not changed. Please see the series for further information.
  10. %
  11. % Version: 1.0
  12. % Date: May 1, 1993
  13. %
  14. %
  15. % This source code is documented in 27.1.9.1, p. III-417.
  16. % Original source in file "macros7.TEX", starting line 1022.
  17. \wlog{L: "ivpyr.tip" ["macros7.TEX," l. 1022, p. III-417]}%
  18. % This file DOES belong to format "texip."
  19. \InputD{futlet.tip}
  20. \InputD{list-mac.tip}
  21. \InputD{wtolist.tip}
  22. \catcode`\@ = 11
  23. \newdimen\@MaximumCurrentLineWidth
  24. \newdimen\@LineWidthLastLine
  25. \newdimen\@LineWidthMinDiff
  26. \newbox\@IPCurrentLineBox
  27. \newbox\@IPCurrentLineBoxTry
  28. \def\InvertedPyramid #1#2#3{%
  29.     \WordsToTeXList{\IVList}#3\EndWordsToTeXList
  30.     \def\LineLengthList{#1}%
  31.     \@LineWidthLastLine = 0pt
  32.     \@LineWidthMinDiff = #2
  33.     \CarOfList{\IVList}{\@IVListTemp}
  34.     \DropFirstElementOfList{\IVList}
  35.     \setbox\@IPCurrentLineBox = \hbox{\@IVListTemp}%
  36.     \CarOfList{\LineLengthList}{\@IVListTemp}% 
  37.     \@MaximumCurrentLineWidth = \@IVListTemp
  38.     \DropFirstElementOfList{\LineLengthList}%
  39.     \ForEveryListElement{\IVList}{\@IVListTypeset}%
  40.     \ifvoid\@IPCurrentLineBox
  41.         \errmessage{\string\InvertedPyramid:
  42.             empty \string\@IPCurrentLineBox}%
  43.     \else
  44.         \centerline{\box\@IPCurrentLineBox}%
  45.     \fi
  46. }
  47. \def\@IVListTypeset #1{%
  48.     \setbox\@IPCurrentLineBoxTry =
  49.         \hbox{\copy\@IPCurrentLineBox \space#1}%
  50.     \ifdim\wd\@IPCurrentLineBoxTry < \@MaximumCurrentLineWidth
  51.         \setbox\@IPCurrentLineBox = \box\@IPCurrentLineBoxTry
  52.     \else
  53.         \@LineWidthLastLine = \wd\@IPCurrentLineBox
  54.         \centerline{\box\@IPCurrentLineBox}%
  55.         \setbox\@IPCurrentLineBox = \hbox{#1}%
  56.         \CarOfList{\LineLengthList}{\@IVListTemp}% 
  57.         \@MaximumCurrentLineWidth = \@IVListTemp
  58.         \DropFirstElementOfList{\LineLengthList}%
  59.         \dimen0 = \@LineWidthLastLine
  60.         \advance\dimen0 by -\@MaximumCurrentLineWidth
  61.         \ifdim\dimen0 < \@LineWidthMinDiff
  62.             \@MaximumCurrentLineWidth = \@LineWidthLastLine
  63.             \advance\@MaximumCurrentLineWidth by -\@LineWidthMinDiff
  64.         \fi
  65.     \fi
  66. }
  67. \catcode`\@ = 12
  68.